home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 7
/
FM Towns Free Software Collection 7.iso
/
ms_dos
/
ioinp
/
ioinp.asm
next >
Wrap
Assembly Source File
|
1993-11-30
|
7KB
|
351 lines
;------------------------------------------------------
;ioinp.asm io直接書き込みTOOL for Batch file
;電脳わ-るど DW0049 BY しんちゃん(^_^)
;------------------------------------------------------
.8086
PSP_cmd_tail equ 81h ; コマンド引数のアドレス
CR equ 13 ; リターン文字コード(0Dh)
seg_inp segment byte public
assume cs:seg_inp, ds:seg_inp
org 100h
ioinp proc far
start:
mov si,PSP_cmd_tail
mov bl,[si]
cmp bl,CR
je TAITORU
jmp MOJI_CHK ; 最初の文字検索にジャンプ
MOJI_chkBAR:
inc si
mov bl,[si]
cmp bl,'i' ; 'i'の時
je I_NOTOKI ; イコールjmp
cmp bl,'I' ; 'I'の時
je I_NOTOKI ; イコールjmp
cmp bl,'c' ; 'c'の時
je C_NOTOKI ; イコールjmp
cmp bl,'C' ; 'C'の時
je C_NOTOKI ; イコールjmp
mov dx,offset ERR_PARA_TIGAU
call STR_SYORI
jmp MOJI_CHK ; 最初の文字検索にジャンプ
I_NOTOKI:
mov cl,1
C_NOTOKI:
inc si
mov bl,[si]
cmp bl,' ' ; ' 'の時
je SP_NOTOKI ; イコールjmp
mov dx,offset ERR_PARA_HUMEI
call STR_SYORI
MOJI_CHK:
xor cx,cx ; cx=0 //Zero register
mov bl,[si]
cmp bl,'-' ; '-'の時
je MOJI_chkBAR ; イコールjmp
cmp bl,CR ; リターン文字コード
je EXIT ; イコールjmp
inc si
jmp MOJI_CHK ; 最初の文字検索にジャンプ
EXIT:
mov ah,4Ch
mov al,0
int 21h ; DOS function 4Ch
; al=return code(おわり)
TAITORU:
mov dx,offset MES_4
call STR_SYORI
jmp EXIT
SP_NOTOKI:
inc si
mov bl,[si]
cmp bl,'0' ; '0'以下の時
jb MOJI_JMP ; 次の文字検索にジャンプ
cmp bl,'9' ; '9'以上の時
ja MOJI_JMP ; 次の文字検索にジャンプ
sub bl,'0' ;30h文字コード引く
jmp DATA_HOKAN
MOJI_JMP:
cmp bl,'A' ; 'A'以下の時
jb MOJI_JMP2 ; 次の文字検索にジャンプ
cmp bl,'F' ; 'F'以上の時
ja MOJI_JMP2 ; 次の文字検索にジャンプ
sub bl,'1' ;31h文字コード引く
jmp DATA_HOKAN
MOJI_JMP2:
cmp bl,'a' ; 'a'以下の時
jb MOJI_ERR ; エラー表示にジャンプ
cmp bl,'f' ; 'f'以上の時
ja MOJI_ERR ; エラー表示にジャンプ
sub bl,'1'+' ' ;51h文字コード引く
jmp DATA_HOKAN
MOJI_ERR:
mov dx,offset ERR_SUUJI_TIGAU
call STR_SYORI
jmp MOJI_CHK ; 最初の文字検索にジャンプ
DATA_HOKAN:
call NANIYATTE
cmp ch,1
je DAT
mov dx,ADOL
call SHL_4
add dl,bl
mov ADOL,dx
jmp ADO
DAT:
mov dl,DATA
call SHL_4
add dl,bl
mov DATA,dl
ADO:
mov bl,[si+1]
cmp bl,CR ; 次がCRの時
je HYOUJI ; イコールjmp
cmp bl,' ' ; ' 'の時
je HYOUJI ; イコールjmp
jmp SP_NOTOKI
HYOUJI:
cmp cl,0
jne HYOUJI2
jmp C_END
HYOUJI2:
cmp ch,1
je HENKOU
inc si
call IN_NOTOKI
mov ch,1
jmp SP_NOTOKI
HENKOU:
;変更処理開始する。
mov dx,offset MES_2
call STR_SYORI
mov al,DATA
mov dx,ADOL
out dx,al
C_END:
call IN_NOTOKI
mov DATA,0
mov ADOL,0
mov dx,offset MES_3
call STR_SYORI
jmp MOJI_CHK ; 最初の文字検索にジャンプ
ioinp endp
;==========================================================================
; 文字処理
;==========================================================================
STR_SYORI proc near
mov ah,9
int 21h ; DOS Services 文字列表示
ret
STR_SYORI endp
;==========================================================================
; 4BITシフト
;==========================================================================
SHL_4 proc near
mov ax,dx
xor dx,dx
shl ax,1
shl ax,1
shl ax,1
shl ax,1
mov dx,ax
xor ax,ax
ret
SHL_4 endp
;==========================================================================
; 10進数と16進数のバグ取り
;==========================================================================
NANIYATTE proc near
cmp bl,10h
je NAN10
cmp bl,11h
je NAN11
cmp bl,12h
je NAN12
cmp bl,13h
je NAN13
cmp bl,14h
je NAN14
cmp bl,15h
je NAN15
ret
NAN10:
mov bl,0ah
ret
NAN11:
mov bl,0bh
ret
NAN12:
mov bl,0ch
ret
NAN13:
mov bl,0dh
ret
NAN14:
mov bl,0eh
ret
NAN15:
mov bl,0fh
ret
NANIYATTE endp
;==========================================================================
; DATAから文字列$取り出し表示
;==========================================================================
IN_NOTOKI proc near
mov dx,ADOL
call DISP_SHR
mov dx,ADOL
shl dx,1
shl dx,1
shl dx,1
shl dx,1
call DISP_SHR
mov dx,ADOL
shl dx,1
shl dx,1
shl dx,1
shl dx,1
shl dx,1
shl dx,1
shl dx,1
shl dx,1
call DISP_SHR
mov dx,ADOL
shl dx,1
shl dx,1
shl dx,1
shl dx,1
shl dx,1
shl dx,1
shl dx,1
shl dx,1
shl dx,1
shl dx,1
shl dx,1
shl dx,1
call DISP_SHR
mov dx,'='
mov ah,2
int 21h ; DOS Services 1文字表示
mov dx,ADOL
in al,dx
mov dl,al
shl dx,1
shl dx,1
shl dx,1
shl dx,1
shl dx,1
shl dx,1
shl dx,1
shl dx,1
call DISP_SHR
mov dx,ADOL
in al,dx
mov dl,al
shl dx,1
shl dx,1
shl dx,1
shl dx,1
shl dx,1
shl dx,1
shl dx,1
shl dx,1
shl dx,1
shl dx,1
shl dx,1
shl dx,1
call DISP_SHR
mov dx,offset MES_1
call STR_SYORI
ret
IN_NOTOKI endp
;==========================================================================
; BITシフト戻し
;==========================================================================
DISP_SHR proc near
shr dx,1
shr dx,1
shr dx,1
shr dx,1
shr dx,1
shr dx,1
shr dx,1
shr dx,1
shr dx,1
shr dx,1
shr dx,1
shr dx,1
add dx,'0'
call MODOSI
mov ah,2
int 21h ; DOS Services 1文字表示
ret
DISP_SHR endp
;==========================================================================
; DATA戻し2
;==========================================================================
MODOSI proc near
cmp dx,'9'
ja MODOSI2
ret
MODOSI2:
add dx,' '+7
ret
MODOSI endp
;--------------------------------------------------------------------------
DATA db 0
ADOL dw 0
ERR_PARA_TIGAU db ' パラメータが 違います。',0Dh,0Ah,'$'
ERR_PARA_HUMEI db ' スペースが 有りません。',0Dh,0Ah,'$'
ERR_SUUJI_TIGAU db ' 数値の入力が おかしいです。',0Dh,0Ah,'$'
MES_1 db ' です。','$'
MES_2 db ' 変更します。',0Dh,0Ah,'$'
MES_3 db 0Dh,0Ah,'ok',0Dh,0Ah,'$'
MES_4 db 1BH,5BH,33H,31H,6DH
db 'io直接入力TOOL ',1BH,5BH,33H,35H,6DH
db '「あいおー いんぷっと」 v0.03',1BH,5BH,6DH,' '
db 'BY しんちゃん(^_^)',0Dh,0Ah
db '-c [ioアドレス]',09h,09h,'(チェックする。)',0Dh,0Ah
db '-i [ioアドレス] [パラメータ]',09h,'(書き換える。)',0Dh,0Ah
db 09h,'例)ioinp -i 5ec 0'
db 09h,09h,'(「互換モード」にする。)(HR20)',0Dh,0Ah
db 09h,'例)ioinp -c 5e6'
db 09h,09h,09h,'(VRAMのwaitを調べる。)(20F以降)',0Dh,0Ah
db 09h,'例)ioinp -i 5e2 0 -i 5e6 3'
db 09h,'(メモリーのwaitを「0」に VRAMのwaitを「3」に。)'
db 0Dh,0Ah,'$'
db 44h, 57h, 30h, 30h, 34h, 39h, '$'
db 82h,0B5h, 82h,0F1h, 82h,0BFh
db 82h,0E1h, 82h,0F1h, 81h, 69h
db 81h, 4Fh, 81h, 51h, 81h, 4Fh
db 81h, 6Ah, '$', '$', '$'
seg_inp ends
end start